package es.antonio.duarte.abrahamAdmin.servicios;

import java.util.Collection;
import java.util.Date;

import es.antonio.duarte.abrahamAdmin.dao.CosasDAO;
import es.antonio.duarte.abrahamAdmin.model.Cosas;

/**
 * Implementacion del servicio de cosas de la plantilla.
 * @author Antonio Duarte
 */
@SuppressWarnings("unchecked")
public class CosasServicioImpl implements CosasServicio {
   /**
    * Texto con el que rellenar las excepciones.
    */
   private String mensaje = "Debe introducir una parámetro en este método";
   /**
    * El dao asociado a la clase Cosas con el que iremos a la base de datos.
    */
   private CosasDAO cosasDAO;
   /**
    * Recuperamos el dao  asociado a Cosas.
    * @return CosasDAO El dao de cosas.
    */
   public CosasDAO getCosasDAO() {
      return cosasDAO;
   }
   /**
    * Spring usará este método para inyectar el dao de Cosas.
    * @param cosasDAO El dao de Cosas.
    */
   public void setCosasDAO(final CosasDAO cosasDAO) {
      this.cosasDAO = cosasDAO;
   }

   /**
    * Inserta la entidad proporcionada.
    * @param entidad Entidad que se desea insertar a la BBDD
    */
   public void insertar(final Object entidad) {
      if (entidad == null) {
         throw new IllegalArgumentException(mensaje);
      }
      cosasDAO.insertar(entidad);
   }

   /**
    * Actualiza la entidad proporcionada.
    * @param entidad Entidad que se desea actualizar en la BBDD
    */
   public void actualizar(final Object entidad) {
      if (entidad == null) {
         throw new IllegalArgumentException(mensaje);
      }

      cosasDAO.actualizar(entidad);
   }

   /**
    * Elimina la entidad proporcionada.
    * @param entidad Entidad que se desea eliminar de la BBDD
    */
   public void eliminar(final Object entidad) {
      if (entidad == null) {
         throw new IllegalArgumentException(mensaje);
      }

      cosasDAO.eliminar(entidad);
   }

   /**
    * Consulta de todas las cosas de la plantilla. Podra recibir un
    * objeto o ser invocado sin parametros.
    * @return Lista de cosas de la plantilla (vacia si no hay
    *         registros)
    * @param objeto Objeto con el que se realizara la consulta
    */
   public Collection consultar(final Object... objeto) {
      return cosasDAO.consultar(Cosas.class);
   }

   /**
    * Consulta las cosas de la plantilla que concuerden con el id
    * proporcionado.
    * @return Objeto Cosa asociada al id proporcionado
    * @param id La id del objeto que se quiere recuperar.
    */
   public Object consultarPorId(final Long id) {
      if (id == null) {
         throw new IllegalArgumentException(mensaje);
      }
      return cosasDAO.consultarPorId(id, Cosas.class);
   }

   /**
    * Consulta las cosas de la plantilla que contengan el texto con el cuerpo proporcionado.
    * @return Objeto Cosa asociada al id proporcionado
    * @param cu El texto o parte de él del cuerpo del objeto que se quiere recuperar.
    */
	public Collection consultarPorCuerpo(String cu) {
		if (cu == null) {
	         throw new IllegalArgumentException(mensaje);
	      }
	      return cosasDAO.consultarPorCuerpo(cu);
	}
	/**
	    * Consulta las cosas de la plantilla que coincidan con la fecha.
	    * @return Objeto Cosas asociada a la fecha
	    * @param fecha La fecha del objeto que se quiere recuperar.
	    */
	public Collection consultarPorFecha(Date fecha) {
		if (fecha == null) {
	         throw new IllegalArgumentException(mensaje);
	      }
	      return cosasDAO.consultarPorFecha(fecha);
	}
	/**
	    * Consulta las cosas de la plantilla que coincidan con la fecha.
	    * @return Objeto Cosa asociada a la fecha
	    * @param fecha La fecha del objeto que se quiere recuperar.
	    */public Collection consultarPorTitulo(String ti) {
	    	if (ti == null) {
		         throw new IllegalArgumentException(mensaje);
		      }
		      return cosasDAO.consultarPorTitulo(ti);
	    }
}
